home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / CommToolbox classes / Sources / CCTBDesktop.c < prev    next >
Text File  |  1993-03-05  |  4KB  |  172 lines

  1. /* ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
  2.  
  3.     CCTBDesktop.c
  4.     
  5.     CommToolbox compatible Desktop.
  6.  
  7.     SUPERCLASS = CDesktop / CFWDesktop.
  8.     
  9.     Copyright © 1992 Romain Vignes. All rights reserved.
  10.  
  11. ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ */
  12.  
  13. #include <CBartender.h>                        /* TCL includes */
  14. #include <Constants.h>
  15. #include <CWindow.h>
  16. #include <Global.h>
  17.  
  18. #include "CCTBApp.h"                        /* Other includes */
  19. #include "CCTBDesktop.h"
  20. #include "CFileTransfer.h"
  21. #include "CTermPane.h"
  22.  
  23.  
  24. /* Application globals */
  25.  
  26. extern CApplication    *gApplication;
  27. extern CBartender    *gBartender;
  28. extern CBureaucrat    *gGopher;
  29.  
  30.  
  31. /*
  32.  * ICTBDesktop
  33.  *
  34.  * Initialization of the Desktop object
  35.  *
  36.  * aSupervisor:    desktop supervisor in the chain of command
  37.  *
  38.  */
  39.  
  40. void CCTBDesktop::ICTBDesktop(CBureaucrat *aSupervisor)
  41. {
  42.  
  43. #if USE_FLOATING_WINDOWS
  44.     CAcurDesktop::IAcurDesktop(aSupervisor);    /* Superclass initialisation */
  45. #else
  46.     CAcurDesktop::IAcurDesktop(aSupervisor);    /* Superclass initialisation */
  47. #endif
  48.  
  49. }
  50.  
  51.  
  52. /* ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ */
  53.  
  54. /*
  55.  * DispatchClick
  56.  *
  57.  * Mouse clicks dispatching
  58.  *
  59.  * macEvent:     Pointer on the mouse event record
  60.  *
  61.  */
  62.  
  63. void CCTBDesktop::DispatchClick(EventRecord *macEvent)
  64. {
  65.     short                thePart,theMenu,theItem;    
  66.     WindowPeek            macWindow;    
  67.     register CWindow    *theWindow;    
  68.     register long        menuChoice;
  69.     Boolean                toolMenu;
  70.         
  71.     thePart = FindWindow(macEvent->where, (WindowPtr*)&macWindow);
  72.                         /* Click position */
  73.     
  74.     if (macWindow != NULL) 
  75.     {
  76.         if (macWindow->windowKind != OBJ_WINDOW_KIND)
  77.             return;
  78.         theWindow = (CWindow*) GetWRefCon((WindowPtr) macWindow);
  79.                                 /* WIndow object linked to the window record */
  80.     }
  81.     else theWindow = NULL;
  82.     
  83.     if (topWindow && (theWindow != topWindow) && topWindow->IsModal())
  84.                                         /* Active modal window ? */
  85.     {
  86.         if (thePart != inMenuBar)        /* Inactive window click */
  87.         {
  88.             SysBeep( 3);
  89.             return;
  90.         }
  91.     }
  92.  
  93.     switch (thePart) {        
  94.     
  95.         case inDesk:        /* Desk click */
  96.             CountClicks(this, macEvent);
  97.             DoClick(macEvent->where, macEvent->modifiers, macEvent->when);
  98.             break;
  99.         
  100.         case inMenuBar:        /* Menu bar click */
  101.             gBartender->UpdateAllMenus();
  102.             menuChoice = MenuSelect(macEvent->where);    /* Element selected */
  103.             
  104.             theMenu = HiShort(menuChoice);            
  105.             theItem = LoShort(menuChoice);
  106.             
  107.             toolMenu = CFileTransfer::cTestToolMenu(theMenu,theItem);
  108.             
  109.             if (!toolMenu)
  110.                 toolMenu = CTermPane::cTestToolMenu(theMenu, theItem);        
  111.                         
  112.             if (theMenu && !toolMenu) {                        
  113.                 gGopher->DoCommand(gBartender->FindCmdNumber(theMenu, theItem));
  114.                             /* Send the command to the gopher */
  115.             }
  116.             
  117.             HiliteMenu(0);    
  118.             break;
  119.             
  120.         case inSysWindow:    /* DA window ? */
  121.             SystemClick(macEvent, (WindowPtr) macWindow);
  122.             break;
  123.             
  124.         case inContent:        /* Window content ? */
  125.             if (!theWindow->active || ( (theWindow->floating &&
  126.                                 ((WindowPtr)macWindow != FrontWindow())))) {
  127.                                         
  128.                 theWindow->Select();    /* Window activation */
  129.                 
  130.                 if (!theWindow->actClick) {
  131.                     break;                        /* Activation click */        
  132.                 }            
  133.                 
  134.                 else
  135.                     theWindow->Activate();        /* Auto activation */
  136.             }
  137.             
  138.             if (theWindow->wantsClicks) {    
  139.                 UpdateWindows();        
  140.                                         
  141.                 theWindow->DispatchClick(macEvent);    
  142.                                         
  143.                 
  144.             } else {                
  145.                 CountClicks(this, macEvent);        /* Desk click */
  146.                 DoClick(macEvent->where, macEvent->modifiers, macEvent->when);
  147.             }
  148.             break;
  149.             
  150.         case inDrag:
  151.             theWindow->Drag(macEvent);
  152.             break;
  153.             
  154.         case inGrow:
  155.             theWindow->Resize(macEvent);
  156.             break;
  157.             
  158.         case inGoAway:
  159.             if (TrackGoAway((WindowPtr) macWindow, macEvent->where))
  160.                 theWindow->Close();
  161.             break;
  162.             
  163.         case inZoomIn:
  164.         case inZoomOut:
  165.             if (TrackBox( (WindowPtr)macWindow, macEvent->where, thePart))
  166.                 theWindow->Zoom(thePart);
  167.             break;
  168.     }
  169. }
  170.     
  171.     
  172. /* ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ */